<?php
App::import('Vendor', 'xmlparser/xexcelxmlparser');
App::import('Vendor', 'cryptastic');


error_reporting(E_ALL ^ E_NOTICE);
require_once 'readmains_controller.php';
class UpfilesController extends AppController {

	var $name = 'Upfiles';
  
    var $helpers = array('Html', 'Form', 'FileUpload.FileUpload');
    var $components = array('FileUpload.FileUpload');
    var $uses=array('Upfile','Kqbanhangxl','Donvi','Thoigian','Kqbanhangttxl','Kehoach','Kenhxl','Phankenhxl');
    var $paginate=array('limit'=>10);

//danh cho admin
	function index() {
		$this->Upfile->recursive = 0;
		$this->set('upfiles', $this->paginate());
	}
 //danh cho truong don vi
    function indextt($iddonvi) {
        //tim all nhanvien thuoc don vi
        $dv=$this->Donvi->find('first',array('conditions'=>array('id'=>$iddonvi),'fields'=>array('tendv')));
        $allnv=$this->Nhanvien->find('list',array('conditions'=>array('donvi_id'=>$iddonvi),'fields'=>array('id','id')));
		$this->Upfile->recursive = 0;
		$this->set('upfiles', $this->paginate(array('nhanvien_id'=>$allnv)));
        $this->set(compact('dv'));
	}
 //danh cho ca nhan nguoi upfile
    function indexcn($idnhanvien) {
		$this->Upfile->recursive = 0;
		$this->set('upfiles', $this->paginate(array('nhanvien_id'=>$idnhanvien)));
	}
    
	function beforeFilter(){
        parent::beforeFilter();
        $this->FileUpload->fileModel('Upfile');
    }

    function add(){
    //set dinh dang ngay theo khu vuc
        date_default_timezone_set('UTC');
        ini_set('memory_limit','1024M'); 
        if(!empty($this->data)){
            //kiem tra loi rong?
            $er=$this->FileUpload->showErrors();
            
            if($this->FileUpload->success||empty($er)){ //if uploaded successfully or the error message is empty
               
                //luu ten cua tap tin vua up len
                $client_filename = $this->data['Upfile'][0]['file']['name'];            
             
                
                //dat lai ten tap tin khi dua no len server, de phong trung ten,
                //thiet lap chuoi de dat ten
                $server_filename =  '_imp'. date('smhidmY').$client_filename;                              
                
                
                //thong tin file vua dua len se ghi nhan lai
                $save_data ['Upfile']['ghichu']= $this->data['Upfile']['ghichu'];
                $save_data['Upfile']['tenfile'] = $client_filename;
                $save_data['Upfile']['tenfileserver'] = $server_filename;
                $save_data['Upfile']['kieu'] = $this->data['Upfile'][0]['file']['type'];
                $save_data['Upfile']['dolon'] =$this->data['Upfile'][0]['file']['size'];               
                
                //doi ten file tap tin vua dua len
                @rename(WWW_ROOT.'files'.DS.$client_filename, WWW_ROOT.'files'.DS.$server_filename);
                
                  if(!$this->Upfile->query("
                        insert into Upfiles (ghichu,tenfile,tenfileserver,kieu,nhanvien_id,dolon) values
                            ('".
                                $save_data['Upfile']['ghichu']."','".
                                $save_data['Upfile']['tenfile']."','".
                                $save_data['Upfile']['tenfileserver']."','".
                                $save_data['Upfile']['kieu']."','".
                            $this->Session->read('cur_manv')."','".
                             $save_data['Upfile']['dolon']."');" ) )
                {     
                    //neu k luu dc thi phai xoa file
                    @unlink(WWW_ROOT.DS.'files'.DS. $save_data['Upfile']['tenfileserver']);
	
                    $this->Session->setFlash('Loi luu tru tren server!');
                    $this->redirect(array('action'=>'index'));                    
                }
                
                //tẩy trắng bảng truoc khi thuc hien luu
                $this->Upfile->query('truncate table kqbanhangxls');
                $this->Upfile->query('truncate table kqbanhangttxls');
                $this->Upfile->query('truncate table kenhxls');
                 
                $kq=$this->__impTodb(WWW_ROOT.DS.'files'.DS. 
                        $save_data['Upfile']['tenfileserver'],$save_data['Upfile']['tenfile']);
                //khi imp xong thì tự động xóa file trong csdl
                @unlink(WWW_ROOT.DS.'files'.DS. $save_data['Upfile']['tenfileserver']);                 
                
                switch($kq){
                        //luu thong tin file vua upload thi xoa file de server nhe bot
                      case 0: 
                      
                        $this->Upfile->query('update upfiles set ketqua=\'Thành công\' 
                                where tenfileserver=\''.$save_data['Upfile']['tenfileserver']."'
                                    and nhanvien_id=".$this->Session->read('cur_manv'));
                                    
                        $this->Session->setFlash('File được import thành công!',
                                 'default', array('class' => 'success'));              
                        $this->redirect(array('controller'=>'kqbanhangxls','action'=>'index'));
                      case 1:
                        $this->Session->setFlash('Mã kênh trong file excel không tìm thấy trong csdl!'); break;
                      case 2:
                        $this->Session->setFlash('Kênh chưa được phân!'); break;
                      
                      case 3:
                        $this->Session->setFlash('Đơn vị của nhân viên không hợp lệ'); break;
                      
                      case 4:
                        $this->Session->setFlash('Kế hoạch cho kết quả bán hàng này chưa có!'); break;
                      
                      case 5:
                        $this->Session->setFlash('Chỉ tiêu cho kết quả bán hàng chưa được tạo!'); break;
                      
                      case 6:
                        $this->Session->setFlash('Dữ liệu khi lưu bị lỗi!'); break;
                      case 7:
                        $this->Session->setFlash('Dữ liệu file excel không phải thuộc đơn vị của bạn!'); break;
                      case 8:
                        $this->Session->setFlash('Dữ liệu file excel không cùng 1 tuần!'); break;
                      case 9:
                        $this->Session->setFlash('Kế hoạch chung cho đơn vị chưa có!'); break;
                      case 10:
                        $this->Session->setFlash('Chỉ tiêu của đơn vị chưa có!'); break;
                      case 11:
                        $this->Session->setFlash('Loại kênh chưa có!'); break;
                      case 12:
                        $this->Session->setFlash('Lỗi khi lưu dữ liệu bán ở đơn vị!'); break;
                      case 13:
                        $this->Session->setFlash('Không tồn tại đơn vị cha của đơn vị đang thực hiện IMP!'); break;
                      
                      
                      case 15: 
                      
                        $this->Upfile->query('update upfiles set ketqua=\'Thành công\' 
                                where tenfileserver=\''.$save_data['Upfile']['tenfileserver']."'
                                    and nhanvien_id=".$this->Session->read('cur_manv'));
                                    
                        $this->Session->setFlash('Dữ liệu kênh được import thành công!',
                                 'default', array('class' => 'success'));              
                        $this->redirect(array('controller'=>'kenhxls','action'=>'index'));
                      case 16:
                        $this->Session->setFlash('Loại kênh chưa tồn tại!'); break;
                      case 17:
                        $this->Session->setFlash('Đơn vị của kênh không tồn tại!'); break;
                      case 18:
                        $this->Session->setFlash('Có lỗi trong quá trình import dữ liệu kênh!'); break;
                      case 19:
                        $this->Session->setFlash('Nhân viên để phân kênh không tồn tại!'); break;
                      case 20:
                        $this->Session->setFlash('Lưu dữ liệu kênh cho phân kênh ở bảng tạm bị lỗi!'); break;
                      case 21:
                        $this->Session->setFlash('Lưu dữ liệu phân kênh ở bảng tạm bị lỗi!'); break;
                      
                      
                      
                      
                      case 25: 
                      
                        $this->Upfile->query('update upfiles set ketqua=\'Thành công\' 
                                where tenfileserver=\''.$save_data['Upfile']['tenfileserver']."'
                                    and nhanvien_id=".$this->Session->read('cur_manv'));
                                    
                        $this->Session->setFlash('Dữ liệu Phân kênh được import thành công!',
                                 'default', array('class' => 'success'));              
                        $this->redirect(array('controller'=>'phankenhxls','action'=>'index'));
                      
                      
                }
                $this->Upfile->query('update upfiles set ketqua=\'Có lỗi\' 
                                where tenfileserver=\''.$save_data['Upfile']['tenfileserver']."'
                                    and nhanvien_id=".$this->Session->read('cur_manv'));
                        
                //neu chay dc toi khuc nay chuyen qua trang báo có lỗi
                if($kq<15)
                    $this->redirect(array('controller'=>'kqbanhangxls','action'=>'indexe'));
                elseif($kq>18)
                    $this->redirect(array('controller'=>'phankenhxls','action'=>'index'));
                else
                    $this->redirect(array('controller'=>'kenhxls','action'=>'index'));
                
                
                
            }else{
  //              debug($this->FileUpload->showErrors());
  //hien thi loi neu co loi
                $this->Session->setFlash($er);
            }
        }
        
        $this->set('files');
    }   


 /**
     * __impTodb($newfilename, $client_filename)
     * 
     * Hàm này đọc dữ liệu từ 1 file excel (read content of excel file)
     * Lưu trữ dữ liệu đọc được vào csdl, lưu theo từng dòng trên excel (save to DB, save each row)
     *  
     * @param mixed $newfilename đường dẫn đến file excel trên server (the patch of excel on server)
     * @param mixed $client_filename tên của file excel lúc tải lên (old filename before upload)
     *          
     * @return number (==0 if succeed, otherwise there are 7 error cases)
     * 
     */ 
   function __impTodb($newfilename, $client_filename){
    
        //doc du lieu tu tap tin tren server
        $data = new Spreadsheet_Excel_Reader($newfilename,true,'UTF-8');
        $record = array();
        $record=$data->dump(true,true); 
        $sql='';
        
        
        
        /** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *  DÀNH CHO LƯU PHÂN KÊNH, VÀ KÊNH
         *  BAT BUOC COT DAU TIEN (DONG THU 2 CUA EXCEL) PHAI LA "ID"
         * */
        if(trim(strtolower($record [2] [1]))=='id'){
           //khoi tao cac gia tri 
            $sodong=count($record)+2;
    //    debug(count($record));
            $k=array();
            $p=array();
            $k ['Kenhxl'] ['loaikenh_id']='';
            $k ['Kenhxl'] ['makenh']='';
            $k ['Kenhxl'] ['tenkenh']='';
            $k ['Kenhxl'] ['diachi']='';
            $k ['Kenhxl'] ['sdt']='';
            $k ['Kenhxl'] ['donvi_id']='';
            
            $p['Phankenhxl']['nhanvien_id']='';
            $p['Phankenhxl']['makenh']='';
            $p['Phankenhxl']['ngaybd_hd']='';
            
            //kiem tra xem co phai phan kenh khong? Co thi =1
            $pk=0;
            
            $i=3;
            while($sodong>($i)){
                
                    $sql="
                        select id from loaikenhs
                        where  '".$record [$i] [2]."'
                            in (id, loaikenh) ";
                    //debug($sql);
                    $loaik=$this->Upfile->query($sql);
                    if(empty($loaik))
                        return 16;
                    
                    $sql="
                        select id from donvis
                        where '".$record [$i] [7]."'
                            in (id, madv, tendv, concat(madv,'-',tendv)) ";
                    $dvk=$this->Upfile->query($sql);
                    if(empty($dvk))
                        return 17;
                    
                    //trong truong hop cot thu 8 co du lieu, tuc co du lieu nhanvien_id
                    /** ===============================
                     * Luu PHANKENHS
                     * */
                    if(!empty($record [$i][8])){
                        $pk=1;
                        
                        $sql="
                        select id from nhanviens
                        where '".$record [$i] [8]."'
                            in (id, manv, tennv, concat(manv,'-',tennv)) ";
                        $nv=$this->Upfile->query($sql);
                        if(empty($nv))
                            return 19;
            //cot 1: stt, 2: loaikenh, 3:makenh,4:tenkenh,5:diachi, 6: sdt, 7: donvi, 8: nhanvien_id, 9:ngaybd
                        
                        $this->Kenhxl->create();
                        $k ['Kenhxl'] ['loaikenh_id']=$loaik [0]['loaikenhs'] ['id'];
                        $k ['Kenhxl'] ['makenh']=$record [$i] [3];
                        $k ['Kenhxl'] ['tenkenh']=$record [$i] [4];
                        $k ['Kenhxl'] ['diachi']=$record [$i] [5];
                        $k ['Kenhxl'] ['sdt']=$record [$i] [6];
                        $k ['Kenhxl'] ['donvi_id']=$dvk[0]['donvis'] ['id'];
                    
                    //xet xem luu kenh co thanh cong
                        if(!$this->Kenhxl->saveAll($k))
                            return 20;
                    //luu phankenh cần:
                    //1/Mã kênh
                    //2/Nhanvien_id
                    //ngay
                        $p['Phankenhxl']['nhanvien_id']=$nv [0] ['nhanviens'] ['id'];
                        $p['Phankenhxl']['makenh']=$record [$i] [3];
                        $p['Phankenhxl']['ngaybd_hd']=date('Y-m-d',strtotime($record [$i] [9]));
                        if(!$this->Phankenhxl->saveAll($p))
                            return 21;
                        
                        
                    }
                    /**
                     * KET THUC LUU PHANKENH
                     * ==================================*/
                    else{
                        $this->Kenhxl->create();
                        $k ['Kenhxl'] ['loaikenh_id']=$loaik [0]['loaikenhs'] ['id'];
                        $k ['Kenhxl'] ['makenh']=$record [$i] [3];
                        $k ['Kenhxl'] ['tenkenh']=$record [$i] [4];
                        $k ['Kenhxl'] ['diachi']=$record [$i] [5];
                        $k ['Kenhxl'] ['sdt']=$record [$i] [6];
                        $k ['Kenhxl'] ['donvi_id']=$dvk[0]['donvis'] ['id'];
                    //$l=                   debug($k);
                        if(!$this->Kenhxl->saveAll($k))
                            return 18;
                    
                   }
                      
                //chuyen qua dong ke tiep
                $i++;
                
            }
            
            //ket thuc luu hoan thanh KENHS
            if($pk!=1)
                return 15;
            else
                return 25;
        }
        /**
         * KẾT THÚC LƯU KÊNH
         * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
        
        
        /** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         * Imp dành cho bán hàng
         * */
        //luu theo truong trong file excel 
//        ---------------------de luu cac du lieu IMP
//--1/LAY CHITIEUNV_ID---->lay kehoach_id (can cu vao ngay)--> 
//mahang+kehoach_id+nhanvien_id-->chitieunv_id
//--
//----2/LAY PHANKENH_ID--->(LAY TU 3 COT MOI SUY RA DC ID CUA PHANKENHS)
//----+Lay makenh (excel)
//---+loaikenh (lay tu tenkenh(excel) cua loaikenhs=>loaikenh_id)
//----+ngaybd_hd(excel)
//
//---3/lay SOLUONG
//---4/NGAY-->LAY LUON NGAY TRONG EXCEL
//---4/DA BAO CAO==>1
      
     /** ******************************************************
      * Khởi tạo các giá trị
      * */  
        $i=9;
        $khoitao=0;
        
        //lay ngay tu file excel, cat ngay ra, thay the '/' thanh '-' de chuyen ngay kieu d-m-y
        // vi neu chuoi co '/' ngay se chuyen kieu m-d-y, neu '-' se chuyen giong ngay VN d-m-y
        $ngaykt=substr($record [5][5],strlen($record [5] [5])-10,10);
        $ngaybd=substr($record [5][5],strpos($record [5] [5],':')+2,10);
        
        if((date('d-m-Y',strtotime(str_replace('/','-',$ngaykt)))-
                date('d-m-Y',strtotime(str_replace('/','-',$ngaybd))))>7)
            return 8;
        
        $ngaykt=date('Y-m-d',strtotime(str_replace('/','-',$ngaykt)));
        
        $ngaybd=date('Y-m-d',strtotime(str_replace('/','-',$ngaybd)));
        
        if(($ngaykt-$ngaybd)>7)
            return 8;
        
      //lay donvi nguoi dung dang đăng nhập
       $dv=$this->Session->read('cur_dv');             
       if(empty($dv))
              return 3;
        
       $dvcha=$this->Upfile->query("select idcha from zdvs where donvi_id=".$dv);
       
       if(empty($dvcha))
              return 13;
                                     
       $sql="select id, thoigian_id from kehoaches where 
                    '".$ngaybd."' >= ngaybd and '".$ngaybd."'  <= ngaykt 
                    and donvi_id=".$dv." and ngaykt-ngaybd<10";
                    
       $kehoachid=$this->Upfile->query($sql);
       if(empty($kehoachid))
              return 4;
       
       
       $thang=$this->Upfile->query("select thoigian_id from thoigians 
                where id=".$kehoachid [0] ['kehoaches'] ['thoigian_id']);
       
       
       $sql="select id from kehoaches where thoigian_id=".$thang [0] ['thoigians'] ['thoigian_id']."
                 and donvi_id=".$dvcha [0] ['zdvs'] ['idcha'];
       $kehoachthang=$this->Upfile->query($sql);
       debug($sql);
       /*
       $kehoachthang=$this->Kehoach->find('list',array(
                'conditions'=>array('thoigian_id'=>$thang,'donvi_id'=>$dv),
                'fields'=>array('id'),'recursive'=>-1));
                */
       //debug($sql);
       if(empty($kehoachthang))
              return 9;
       
       $kehoachid= $kehoachid [0] ['kehoaches'] ['id'];
              
        $s ['Kqbanhangxl'] ['chitieunv_id']='';
        $s ['Kqbanhangxl'] ['phankenh_id']='';
        $s ['Kqbanhangxl'] ['ngay']=$ngaykt;
        $s ['Kqbanhangxl'] ['soluong']='';
     //   $s ['Kqbanhangxl'] ['dabaocao']='';
        
        
        $tt ['Kqbanhangttxl'] ['chitieudv_id']='';
        $tt ['Kqbanhangttxl'] ['loaikenh_id']='';
        $tt ['Kqbanhangttxl'] ['ngay']=$ngaykt;
        $tt ['Kqbanhangttxl'] ['soluong']='';
       /**
        * Kết thúc khởi tạo
        ****************************************************************** */
        
        
        /** ****************************************************************
         * Phân tích các dòng excel
         ** */
        while($khoitao<2){
            $record[$i][1]=trim($record[$i][1]);
            //xet neu rog thi ++1, de neu 3 lan rong lien tiep thi thoat
            if(empty($record[$i][1]))//if 1
                $khoitao++;
            else{// else 1
                $khoitao=0;
                //if(!is_integer(substr($record[$i][1],0,1)))
                if(substr($record[$i][1],0,1)!='T'){//if 2
                    
                  if(strlen($record[$i][1])>10){//if 3
                        $makenh=substr($record[$i][1],0,strpos($record[$i][1],' '));
               //     print_r($makenh);
                       $kenhid=$this->Upfile->query('select id,donvi_id from kenhs where makenh=\''.$makenh.'\'');
                       
                       if(empty($kenhid))
                            return 1;
                       
                       //neu đơn vị trong excel khác đơn vị của người đăng nhập thì thoát ra
                       if($kenhid [0] ['kenhs'] ['donvi_id']!=$dv)
                            return 7;
                                             
                       $sql='select id,nhanvien_id from phankenhs where kenh_id='.$kenhid  [0]['kenhs'] ['id'].
                        ' and ngaybd_hd <=\''.$ngaybd.'\' and ngaykt_hd is null ';
                       
                       $phankenhid=$this->Upfile->query($sql);
                        //debug($sql);
                       if(empty($phankenhid))
                            return 2;
                            
                       
                       $loaikenh=$this->Upfile->query("select loaikenh_id from kenhs where id=".
                            $kenhid  [0]['kenhs'] ['id']);
                       
                       if(empty($loaikenh))
                            return 11;
                                 
                       $s ['Kqbanhangxl'] ['phankenh_id']=$phankenhid [0]  ['phankenhs'] ['id'];
                       $tt ['Kqbanhangttxl'] ['loaikenh_id']=$loaikenh [0] ['kenhs'] ['loaikenh_id'];
                      //tim don vi cua nhanvien
                                         }//het if 3
                   else{ //else 3
        
                        $sql="
                                select chitieunvs.id, h.mahh 
                                from chitieunvs , sanphams s, hanghoas h
                                where chitieunvs.hanghoa_id=h.id and s.masp like '".$record[$i][2]."'
                                    and s.hanghoa_id=h.id
                                    and kehoach_id=".$kehoachid ." and nhanvien_id=".
                                                $phankenhid [0]  ['phankenhs'] ['nhanvien_id'];
                            
                        $chitieunvid=$this->Upfile->query($sql);
                        //debug($sql);
                        if(empty($chitieunvid))
                            return 5;
                        $s ['Kqbanhangxl'] ['chitieunv_id']=$chitieunvid [0] ['chitieunvs'] ['id'];
                        
                        
                        $sql="
                                select chitieudvs.id, h.mahh 
                                from chitieudvs , sanphams s, hanghoas h
                                where chitieudvs.hanghoa_id=h.id and s.masp like '".$record[$i][2]."'
                                    and s.hanghoa_id=h.id
                                    and kehoach_id=".$kehoachthang[0] ['kehoaches'] ['id']." and donvi_id=".$dv;
                        $chitieudvid=$this->Upfile->query($sql);
                        debug($sql);
                        if(empty($chitieudvid))
                            return 10;
                        $tt ['Kqbanhangttxl'] ['chitieudv_id']=$chitieudvid [0] ['chitieudvs'] ['id'];
                        
                    //    print_r($sql);
                        //the cao thi lay tien, con lai thi lay so luong
                        if(substr($chitieunvid [0] ['h'] ['mahh'],0,2)=='TC'){
                            $s ['Kqbanhangxl'] ['soluong']=$record[$i][6];
                            $tt ['Kqbanhangttxl'] ['soluong']= $record[$i][6];
                        }
                        else{
                            $s ['Kqbanhangxl'] ['soluong']=$record[$i][4];
                            $tt ['Kqbanhangttxl'] ['soluong']=$record[$i][4];
                        
                        }   
                        
                        $s ['Kqbanhangxl'] ['dabaocao']=1;
                        $tt ['Kqbanhangttxl'] ['dabaocao']=1;
                        
                        
                        $this->Kqbanhangxl->create();
                        if(!$this->Kqbanhangxl->save($s))
                                return 6;
                        
                        $this->Kqbanhangttxl->create();
                        if(!$this->Kqbanhangttxl->save($tt))
                                return 12;
                              
                            //print_r($s);         
                  }//het else 3
                }//het if 2
            } //het if 1       
            $i++;
        }//het while
        /**
         * Kết thúc phân tích, 
        ****************************************************************************/
        //neu thanh cong thi tra ve 0
        return 0;
        
        /**
         * KẾT THÚC LƯU KẾT QUẢ BÁN HÀNG
         * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
      
           
   }  
   	function delete($id = null,$huong=1) {
		if (!$id) {
			$this->Session->setFlash(__('Thao tác xóa chưa hợp lệ. Vui lòng thử lại', true));
            if($huong==1)
			     $this->redirect(array('action'=>'indexcn',$this->Session->read('cur_manv')));
            elseif($huong==2)
                $this->redirect(array('action'=>'indextt',$this->Session->read('cur_dv')));
            else
                $this->redirect(array('action'=>'index'));
                 
			
		}
		if ($this->Upfile->delete($id)) {
			$this->Session->setFlash(__('1 dòng đã được xóa', true));
			
            if($huong==1)
			     $this->redirect(array('action'=>'indexcn',$this->Session->read('cur_manv')));
            elseif($huong==2)
                $this->redirect(array('action'=>'indextt',$this->Session->read('cur_dv')));
            else
                $this->redirect(array('action'=>'index'));
            }
	}
	
}
?>